/**
 * 格式化功率或能量值
 * @param {number} value - 原始数值
 * @param {boolean} isPower - 是否为功率单位（默认为 false，表示能量单位）
 * @param {string} targetUnit - 目标单位（默认为空，表示自动选择单位）
 * @param {boolean} showDecimal - 是否显示小数点（默认为 true）
 * @returns {{ value: string, unit: string }} 格式化后的数值和单位
 */
export function formatPower(
  value: number | string | undefined,
  isPower: boolean = false,
  targetUnit: string = '',
  showDecimal: boolean = true,
) {
  if (value === undefined) {
    return {
      value: '--',
      unit: '',
    };
  }

  // eslint-disable-next-line no-param-reassign
  value = Number(value);
  if (isNaN(value)) {
    return {
      value: '--',
      unit: '',
    };
  }

  let unit = isPower ? 'kW' : 'kWh';
  let absValue = Math.abs(value);

  const unitMap: { [key: string]: number } = {
    kW: 1,
    kWh: 1,
    MW: 1000,
    MWh: 1000,
    GW: 1000000,
    GWh: 1000000,
  };

  if (targetUnit && unitMap[targetUnit]) {
    absValue = absValue / unitMap[targetUnit];
    unit = targetUnit;
  } else {
    if (absValue >= 1000000) {
      absValue = absValue / 1000000;
      unit = isPower ? 'GW' : 'GWh';
    } else if (absValue >= 1000) {
      absValue = absValue / 1000;
      unit = isPower ? 'MW' : 'MWh';
    }
  }

  const formattedValue = showDecimal ? absValue.toFixed(2) : Math.round(absValue).toString();

  return {
    value: formattedValue,
    unit,
  };
}
